from lxml import etree
# xpath解析适用xml,html
# 另一种导入方式 from lxml import html

xml = """
    <book>
        <id>1</id>
        <name>三上悠亚</name>
        <price>1.23</price>
        <nick>臭豆腐</nick>
        <author>
            <nick id="10086">李白</nick>
            <nick id="10010">杜甫</nick>
            <nick class="joy">周杰伦</nick>
            <nick class="cyl">蔡依林</nick>
            <div>
                <nick>哈哈</nick>
            </div>
        </author>
        <parther>
            <nick id="ppc">碰碰车</nick>
            <nick id="dfj">打飞机</nick>
        </parther>
    </book>
"""
et = etree.XML(xml)
# 获取根节点 /
print("根节点：",et.xpath("/book"))
# 获取子节点和 【子节点的文本内容 --> 子节点/text()返回的是列表】
print("子节点：",et.xpath("/book/name/text()")[0])
# 获取所有nick标签   【 //表示子孙后代 】
print("所有的nick标签：",et.xpath("/book//nick/text()"))
# 获取获取孙子节点的nick标签   /book/*/nick
print("获取孙子节点的nick标签：",et.xpath("/book/*/nick/text()"))
# 通过类选择器获取数据  标签[] --> 表示属性筛选 @属性名="值"
print("查找nick标签中class属性为joy的数据：",et.xpath('/book/author/nick[@class="joy"]/text()'))
# 拿属性值 标签/@属性名
print("拿nick标签中id属性的值",et.xpath("/book/parther/nick/@id"))